Enter the directory of the maca folder on your drive and the name of the tissue you want to analyze.

tissue_of_interest = "Kidney"
library(here)
source(here("00_data_ingest", "02_tissue_analysis_rmd", "boilerplate.R"))
tiss = load_tissue_facs(tissue_of_interest)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
[1] "Scaling data matrix"

  |                                                                                                                                 
  |                                                                                                                           |   0%
  |                                                                                                                                 
  |===========================================================================================================================| 100%
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

Visualize top genes in principal components

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = tiss)

Choose the number of principal components to use.

# Set number of principal components. 
n.pcs = 7

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

For the top-level clustering, aim to under-cluster instead of over-cluster. It will be easy to subset groups and further analyze them below.

# Set resolution 
res.used <- 2.5
tiss <- FindClusters(object = tiss, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
tiss <- RunTSNE(object = tiss, dims.use = 1:n.pcs, seed.use = 10, perplexity=30)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = tiss, do.label = T)

Compare to previous annotations

filename = here('00_data_ingest', '03_tissue_annotation_csv', 
                     paste0(tissue_of_interest, "_facs_annotation.csv"))
previous_annotation = read_csv(filename)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
  X1 = col_character(),
  plate.barcode = col_character(),
  cell_ontology_class = col_character(),
  cell_ontology_id = col_character(),
  free_annotation = col_character(),
  tSNE_1 = col_double(),
  tSNE_2 = col_double()
)
tiss@meta.data[, "previous_annotation"] <- "NA"
tiss@meta.data[as.character(previous_annotation$X1), 'previous_annotation'] <- as.character(previous_annotation$cell_ontology_class)
TSNEPlot(object = tiss, do.return = TRUE, group.by = "previous_annotation")

table(as.character(tiss@meta.data[, "previous_annotation"]))

                               endothelial cell              epithelial cell of proximal tubule 
                                            126                                             117 
       kidney collecting duct intercalated cell           kidney collecting duct principal cell 
                                             65                                              58 
kidney proximal straight tubule epithelial cell                                      macrophage 
                                             98                                              39 
                                             NA                             natural killer cell 
                                              2                                              14 
table(tiss@meta.data[, "previous_annotation"], tiss@ident)
                                                 
                                                   0  1  2  3  4  5  6  7  8
  endothelial cell                                 0 72  0  0  1 53  0  0  0
  epithelial cell of proximal tubule               0  0 55  5  0  0 50  7  0
  kidney collecting duct intercalated cell        65  0  0  0  0  0  0  0  0
  kidney collecting duct principal cell           15  0  0  0  0  0  0  0 43
  kidney proximal straight tubule epithelial cell  0  0  6 52  0  0  0 40  0
  macrophage                                       0  0  0  0 39  0  0  0  0
  NA                                               0  0  0  0  1  0  1  0  0
  natural killer cell                              0  0  0  0 14  0  0  0  0

Check expression of genes of interset.

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

How big are the clusters?

table(tiss@ident)

 0  1  2  3  4  5  6  7  8 
80 72 61 57 55 53 51 47 43 

Assigning cell type identity to clusters

At a coarse level, we can use canonical markers to match the unbiased clustering to known cell types:

tiss <- StashIdent(object = tiss, save.name = "cluster.ids")
cluster.ids <- c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
cell_ontology_class <- c(
  "endothelial cell", 
   'kidney collecting duct intercalated cell', 
   'epithelial cell of proximal tubule', 
   "kidney collecting duct principal cell", 
   "epithelial cell of proximal tubule", 
   'endothelial cell',
   "kidney proximal straight tubule epithelial cell", 
   "kidney proximal straight tubule epithelial cell", 
   "macrophage", 
   "natural killer cell")
free_annotation <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)
tiss = stash_annotations(tiss, cluster.ids, free_annotation, cell_ontology_class)
The following `from` values were not present in `x`: 9
The following `from` values were not present in `x`: 9
The following `from` values were not present in `x`: 9
TSNEPlot(tiss, group.by='cell_ontology_class', do.return=TRUE)
Error in reduction.type %in% names(object@dr) : 
  trying to get slot "dr" from an object of a basic class ("character") with no slots

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = tiss, do.return = TRUE, group.by = "plate.barcode")

Print a table showing the count of cells in each identity category from each plate.

table(as.character(tiss@ident), as.character(tiss@meta.data$plate.barcode))
   
    B001717 B002775 MAA000545 MAA000752 MAA000801 MAA000922
  0       5      11        16         7        23         9
  1      20      17         1         3        21         3
  2      10       7        12         6        20         5
  3       5       8         9        14        18         4
  4       3       3        13        15        18         5
  5      40       7         3         2         1         2
  6      23       5         1         4        18         2
  7       3       8        11         6        10         7
  8       8       2         1         8        17         3
  9       6       3         2         0         3         0

Subset and iterate

We can repeat the above analysis on a subset of cells, defined using cluster IDs or some other metadata. This is a good way to drill down and find substructure.

First subset

# Subset data based on cluster id
subtiss <- SubsetData(object = tiss, ident.use = c(6,4,9,2), do.center = F, do.scale = F, cells.use = )
# To subset data based on cell_ontology_class or other metadata, you can explicitly pass cell names
# anno = 'exocrine cells'
# cells.to.use = tiss@cell.names[which(tiss@meta.data$cell_ontology_class == anno)]
# subtiss <- SubsetData(object = tiss, cells.use = cells.to.use, do.center = F, do.scale = F)
subtiss <- NormalizeData(object = subtiss)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
subtiss <- ScaleData(object = subtiss, vars.to.regress = c("nReads", "percent.ribo","Rn45s"))
[1] "Regressing out nReads"       "Regressing out percent.ribo" "Regressing out Rn45s"       

  |                                                                                                                                 
  |                                                                                                                           |   0%
  |                                                                                                                                 
  |=                                                                                                                          |   1%
  |                                                                                                                                 
  |==                                                                                                                         |   1%
  |                                                                                                                                 
  |===                                                                                                                        |   2%
  |                                                                                                                                 
  |====                                                                                                                       |   3%
  |                                                                                                                                 
  |=====                                                                                                                      |   4%
  |                                                                                                                                 
  |======                                                                                                                     |   5%
  |                                                                                                                                 
  |=======                                                                                                                    |   6%
  |                                                                                                                                 
  |========                                                                                                                   |   7%
  |                                                                                                                                 
  |=========                                                                                                                  |   7%
  |                                                                                                                                 
  |==========                                                                                                                 |   8%
  |                                                                                                                                 
  |===========                                                                                                                |   9%
  |                                                                                                                                 
  |============                                                                                                               |  10%
  |                                                                                                                                 
  |=============                                                                                                              |  10%
  |                                                                                                                                 
  |==============                                                                                                             |  11%
  |                                                                                                                                 
  |==============                                                                                                             |  12%
  |                                                                                                                                 
  |===============                                                                                                            |  12%
  |                                                                                                                                 
  |================                                                                                                           |  13%
  |                                                                                                                                 
  |=================                                                                                                          |  14%
  |                                                                                                                                 
  |==================                                                                                                         |  15%
  |                                                                                                                                 
  |===================                                                                                                        |  15%
  |                                                                                                                                 
  |====================                                                                                                       |  16%
  |                                                                                                                                 
  |=====================                                                                                                      |  17%
  |                                                                                                                                 
  |======================                                                                                                     |  18%
  |                                                                                                                                 
  |=======================                                                                                                    |  18%
  |                                                                                                                                 
  |========================                                                                                                   |  19%
  |                                                                                                                                 
  |========================                                                                                                   |  20%
  |                                                                                                                                 
  |=========================                                                                                                  |  21%
  |                                                                                                                                 
  |==========================                                                                                                 |  21%
  |                                                                                                                                 
  |===========================                                                                                                |  22%
  |                                                                                                                                 
  |============================                                                                                               |  23%
  |                                                                                                                                 
  |=============================                                                                                              |  24%
  |                                                                                                                                 
  |==============================                                                                                             |  24%
  |                                                                                                                                 
  |===============================                                                                                            |  25%
  |                                                                                                                                 
  |================================                                                                                           |  26%
  |                                                                                                                                 
  |=================================                                                                                          |  26%
  |                                                                                                                                 
  |=================================                                                                                          |  27%
  |                                                                                                                                 
  |==================================                                                                                         |  28%
  |                                                                                                                                 
  |===================================                                                                                        |  29%
  |                                                                                                                                 
  |====================================                                                                                       |  29%
  |                                                                                                                                 
  |=====================================                                                                                      |  30%
  |                                                                                                                                 
  |======================================                                                                                     |  31%
  |                                                                                                                                 
  |=======================================                                                                                    |  32%
  |                                                                                                                                 
  |========================================                                                                                   |  32%
  |                                                                                                                                 
  |=========================================                                                                                  |  33%
  |                                                                                                                                 
  |==========================================                                                                                 |  34%
  |                                                                                                                                 
  |===========================================                                                                                |  35%
  |                                                                                                                                 
  |============================================                                                                               |  36%
  |                                                                                                                                 
  |=============================================                                                                              |  37%
  |                                                                                                                                 
  |==============================================                                                                             |  38%
  |                                                                                                                                 
  |===============================================                                                                            |  38%
  |                                                                                                                                 
  |================================================                                                                           |  39%
  |                                                                                                                                 
  |=================================================                                                                          |  40%
  |                                                                                                                                 
  |==================================================                                                                         |  40%
  |                                                                                                                                 
  |===================================================                                                                        |  41%
  |                                                                                                                                 
  |====================================================                                                                       |  42%
  |                                                                                                                                 
  |====================================================                                                                       |  43%
  |                                                                                                                                 
  |=====================================================                                                                      |  43%
  |                                                                                                                                 
  |======================================================                                                                     |  44%
  |                                                                                                                                 
  |=======================================================                                                                    |  45%
  |                                                                                                                                 
  |========================================================                                                                   |  46%
  |                                                                                                                                 
  |=========================================================                                                                  |  46%
  |                                                                                                                                 
  |==========================================================                                                                 |  47%
  |                                                                                                                                 
  |===========================================================                                                                |  48%
  |                                                                                                                                 
  |============================================================                                                               |  49%
  |                                                                                                                                 
  |=============================================================                                                              |  49%
  |                                                                                                                                 
  |==============================================================                                                             |  50%
  |                                                                                                                                 
  |==============================================================                                                             |  51%
  |                                                                                                                                 
  |===============================================================                                                            |  51%
  |                                                                                                                                 
  |================================================================                                                           |  52%
  |                                                                                                                                 
  |=================================================================                                                          |  53%
  |                                                                                                                                 
  |==================================================================                                                         |  54%
  |                                                                                                                                 
  |===================================================================                                                        |  54%
  |                                                                                                                                 
  |====================================================================                                                       |  55%
  |                                                                                                                                 
  |=====================================================================                                                      |  56%
  |                                                                                                                                 
  |======================================================================                                                     |  57%
  |                                                                                                                                 
  |=======================================================================                                                    |  57%
  |                                                                                                                                 
  |=======================================================================                                                    |  58%
  |                                                                                                                                 
  |========================================================================                                                   |  59%
  |                                                                                                                                 
  |=========================================================================                                                  |  60%
  |                                                                                                                                 
  |==========================================================================                                                 |  60%
  |                                                                                                                                 
  |===========================================================================                                                |  61%
  |                                                                                                                                 
  |============================================================================                                               |  62%
  |                                                                                                                                 
  |=============================================================================                                              |  62%
  |                                                                                                                                 
  |==============================================================================                                             |  63%
  |                                                                                                                                 
  |===============================================================================                                            |  64%
  |                                                                                                                                 
  |================================================================================                                           |  65%
  |                                                                                                                                 
  |=================================================================================                                          |  66%
  |                                                                                                                                 
  |==================================================================================                                         |  67%
  |                                                                                                                                 
  |===================================================================================                                        |  68%
  |                                                                                                                                 
  |====================================================================================                                       |  68%
  |                                                                                                                                 
  |=====================================================================================                                      |  69%
  |                                                                                                                                 
  |======================================================================================                                     |  70%
  |                                                                                                                                 
  |=======================================================================================                                    |  71%
  |                                                                                                                                 
  |========================================================================================                                   |  71%
  |                                                                                                                                 
  |=========================================================================================                                  |  72%
  |                                                                                                                                 
  |==========================================================================================                                 |  73%
  |                                                                                                                                 
  |==========================================================================================                                 |  74%
  |                                                                                                                                 
  |===========================================================================================                                |  74%
  |                                                                                                                                 
  |============================================================================================                               |  75%
  |                                                                                                                                 
  |=============================================================================================                              |  76%
  |                                                                                                                                 
  |==============================================================================================                             |  76%
  |                                                                                                                                 
  |===============================================================================================                            |  77%
  |                                                                                                                                 
  |================================================================================================                           |  78%
  |                                                                                                                                 
  |=================================================================================================                          |  79%
  |                                                                                                                                 
  |==================================================================================================                         |  79%
  |                                                                                                                                 
  |===================================================================================================                        |  80%
  |                                                                                                                                 
  |===================================================================================================                        |  81%
  |                                                                                                                                 
  |====================================================================================================                       |  82%
  |                                                                                                                                 
  |=====================================================================================================                      |  82%
  |                                                                                                                                 
  |======================================================================================================                     |  83%
  |                                                                                                                                 
  |=======================================================================================================                    |  84%
  |                                                                                                                                 
  |========================================================================================================                   |  85%
  |                                                                                                                                 
  |=========================================================================================================                  |  85%
  |                                                                                                                                 
  |==========================================================================================================                 |  86%
  |                                                                                                                                 
  |===========================================================================================================                |  87%
  |                                                                                                                                 
  |============================================================================================================               |  88%
  |                                                                                                                                 
  |=============================================================================================================              |  88%
  |                                                                                                                                 
  |=============================================================================================================              |  89%
  |                                                                                                                                 
  |==============================================================================================================             |  90%
  |                                                                                                                                 
  |===============================================================================================================            |  90%
  |                                                                                                                                 
  |================================================================================================================           |  91%
  |                                                                                                                                 
  |=================================================================================================================          |  92%
  |                                                                                                                                 
  |==================================================================================================================         |  93%
  |                                                                                                                                 
  |===================================================================================================================        |  93%
  |                                                                                                                                 
  |====================================================================================================================       |  94%
  |                                                                                                                                 
  |=====================================================================================================================      |  95%
  |                                                                                                                                 
  |======================================================================================================================     |  96%
  |                                                                                                                                 
  |=======================================================================================================================    |  97%
  |                                                                                                                                 
  |========================================================================================================================   |  98%
  |                                                                                                                                 
  |=========================================================================================================================  |  99%
  |                                                                                                                                 
  |========================================================================================================================== |  99%
  |                                                                                                                                 
  |===========================================================================================================================| 100%
[1] "Scaling data matrix"

  |                                                                                                                                 
  |                                                                                                                           |   0%
  |                                                                                                                                 
  |===========================================================================================================================| 100%
subtiss <- FindVariableGenes(object = subtiss, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.8)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

subtiss <- RunPCA(object = subtiss, pcs.compute = 20)
[1] "PC1"
 [1] "Tcf7"          "Frat1"         "Pik3ip1"       "Gatm"          "Ankrd24"       "Zfand2a"       "Il7r"          "Adcy3"        
 [9] "Cd63"          "4632428N05Rik" "Inpp1"         "Zfc3h1"        "Tnrc6a"        "Oxct1"         "Yipf2"         "Ermp1"        
[17] "Dnajc18"       "Spp1"          "Hao2"          "Eid1"          "Msl3"          "Slc5a3"        "Fam49a"        "Cep97"        
[25] "L3mbtl3"       "Gm6225"        "Pms1"          "Ankrd16"       "Fam160b1"      "Gnl3"         
[1] ""
 [1] "Nkg7"     "AW112010" "Anxa2"    "Arhgdib"  "Selplg"   "Tmsb4x"   "Il2rb"    "Coro1a"   "B4galnt1" "H2-Q6"    "Psmb8"   
[12] "Sla"      "Gata3"    "Esyt1"    "Hmha1"    "Rac2"     "Gem"      "Itgb2"    "Ccl5"     "Anxa6"    "Ifngr1"   "Gimap3"  
[23] "Laptm5"   "Cd48"     "Fgl2"     "Cd7"      "Vim"      "Fxyd5"    "Tspan32"  "Lsp1"    
[1] ""
[1] ""
[1] "PC2"
 [1] "Cd79a"   "Cd79b"   "Cd74"    "Ly6d"    "Ms4a1"   "H2-Aa"   "Prkcb"   "H2-Eb1"  "Cnp"     "Hvcn1"   "Ltb"     "Faim3"  
[13] "H2-Ab1"  "Fli1"    "Cd72"    "Spib"    "H2-DMb2" "Cd69"    "Ccr7"    "Mef2c"   "Cd22"    "Filip1l" "Ebf1"    "Lrmp"   
[25] "Cd83"    "Dok3"    "Pik3c2b" "Rnase6"  "Vpreb3"  "H2-Ob"  
[1] ""
 [1] "Ccnd2"         "Fxyd5"         "Lat"           "Vps37b"        "Cd28"          "Itgb7"         "Lck"           "Tnfaip3"      
 [9] "Cd3g"          "Lcp2"          "Cd3d"          "Vav1"          "Frat1"         "Tcf7"          "Ms4a4b"        "AW112010"     
[17] "A630001G21Rik" "Emb"           "Cd8b1"         "Zap70"         "Itgb2"         "Ms4a6b"        "Bcl2"          "Nkg7"         
[25] "Ctsw"          "Ccl5"          "Ctsc"          "Anxa2"         "Gimap3"        "S1pr1"        
[1] ""
[1] ""
[1] "PC3"
 [1] "Unc93b1"       "Crip1"         "Gramd3"        "Pim2"          "Ralgps2"       "Tmem39b"       "Atic"          "Tgif1"        
 [9] "Kdm6b"         "Hsf2"          "Papd4"         "Lat2"          "Btbd7"         "Fcrl1"         "Fen1"          "Spib"         
[17] "Socs5"         "Utp18"         "Scmh1"         "Zbtb2"         "Zfp296"        "Ankrd37"       "1110031I02Rik" "Dffb"         
[25] "Rasgrp1"       "Adck2"         "Ccnj"          "Usp42"         "Zc3h10"        "B4galt7"      
[1] ""
 [1] "Grap"          "Rhof"          "Elmo1"         "Rhoh"          "Lpar6"         "H2-T24"        "Faim3"         "Sept6"        
 [9] "Cd83"          "Tmem209"       "H2-DMa"        "Rfc4"          "Ly9"           "Sell"          "Gimap7"        "Ep300"        
[17] "Shisa5"        "Hltf"          "Slain1"        "Rftn1"         "Akna"          "Ppp1r12c"      "Mical1"        "Mif4gd"       
[25] "Ucp2"          "Zfp263"        "A830007P12Rik" "Asb6"          "Mapkapk3"      "Pcif1"        
[1] ""
[1] ""
[1] "PC4"
 [1] "Sell"      "Cxcr5"     "Ctss"      "Slfn2"     "Fcer2a"    "Blk"       "Ep300"     "Cmtm7"     "Mef2c"     "Gimap7"   
[11] "Serpinb1a" "H2-Ob"     "Ly9"       "Prkd2"     "Tmem209"   "Rnf20"     "Cd69"      "Gm14446"   "Cd55"      "Eral1"    
[21] "Akna"      "Cd72"      "Thap11"    "Fam53b"    "Myst3"     "Dok3"      "Nrm"       "Pml"       "Usp25"     "Bank1"    
[1] ""
 [1] "Ptpn4"         "2810013P06Rik" "Gpr171"        "Pcif1"         "Rcsd1"         "Arid4b"        "Hltf"          "Gm6225"       
 [9] "Rgs19"         "Asb6"          "A830007P12Rik" "Filip1l"       "Rasal3"        "Nipsnap3b"     "R3hcc1"        "Zfp263"       
[17] "Cybb"          "Gstm4"         "Rftn1"         "Ppp1r12c"      "Rassf4"        "Btbd10"        "Rab3gap1"      "Abcg1"        
[25] "Pcnt"          "Pik3c2b"       "Pms1"          "Ngdn"          "Klre1"         "Serpinb6b"    
[1] ""
[1] ""
[1] "PC5"
 [1] "Fcho1"      "Cd5"        "Tacc1"      "Cd247"      "Pwwp2a"     "Smc4"       "Nufip2"     "Orc3"       "Rapgef6"   
[10] "Zc3h12d"    "Esyt1"      "Klhdc4"     "Wars2"      "Rc3h1"      "Tab3"       "Tmem161a"   "Galnt6"     "Ube2g2"    
[19] "Mical1"     "Cdkn2aipnl" "Zfp954"     "Ddx10"      "Mapkapk3"   "Rab28"      "Ccr2"       "Rhof"       "Cd4"       
[28] "Prpf3"      "Faf1"       "Bzw2"      
[1] ""
 [1] "Pkm2"      "P2ry10"    "Arhgap30"  "Lcp2"      "Zap70"     "Xpo1"      "Cd8b1"     "Lck"       "Trim30a"   "Wdr3"     
[11] "Lrrfip1"   "Ms4a4b"    "Ier5"      "Smek1"     "Plekha5"   "Nrm"       "Mef2c"     "Sh3kbp1"   "Cxcr5"     "Serpina3g"
[21] "Fcer2a"    "Stat1"     "Serpinb1a" "Casp8ap2"  "Mad2l1bp"  "Fyn"       "Esco1"     "Ctsw"      "Slc35e1"   "Trp53inp1"
[1] ""
[1] ""
subtiss <- ProjectPCA(object = subtiss, do.print = FALSE)

Run Principal Component Analysis.

subtiss <- RunPCA(object = subtiss, do.print = FALSE)
subtiss <- ProjectPCA(object = subtiss, do.print = FALSE)
# If this fails for your subset, it may be that cells.use is more cells than you have left! Try reducing it.
PCHeatmap(object = subtiss, pc.use = 1:3, cells.use = 290, do.balanced = TRUE, label.columns = FALSE, num.genes = 3)

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = subtiss)

Choose the number of principal components to use.

# Set number of principal components. 
sub.n.pcs = 10

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

# Set resolution 
sub.res.used <- 1
subtiss <- FindClusters(object = subtiss, reduction.type = "pca", dims.use = 1:sub.n.pcs, 
    resolution = sub.res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
subtiss <- RunTSNE(object = subtiss, dims.use = 1:sub.n.pcs, seed.use = 10, perplexity=10)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = subtiss, do.label = T)

subtiss.markers <- FindAllMarkers(object = subtiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05s          
   |++                                                | 2 % ~04s          
   |++                                                | 3 % ~04s          
   |+++                                               | 4 % ~04s          
   |+++                                               | 5 % ~04s          
   |++++                                              | 6 % ~04s          
   |++++                                              | 8 % ~04s          
   |+++++                                             | 9 % ~04s          
   |+++++                                             | 10% ~04s          
   |++++++                                            | 11% ~04s          
   |++++++                                            | 12% ~04s          
   |+++++++                                           | 13% ~04s          
   |+++++++                                           | 14% ~04s          
   |++++++++                                          | 15% ~04s          
   |+++++++++                                         | 16% ~03s          
   |+++++++++                                         | 17% ~03s          
   |++++++++++                                        | 18% ~03s          
   |++++++++++                                        | 19% ~03s          
   |+++++++++++                                       | 20% ~03s          
   |+++++++++++                                       | 22% ~03s          
   |++++++++++++                                      | 23% ~03s          
   |++++++++++++                                      | 24% ~03s          
   |+++++++++++++                                     | 25% ~03s          
   |+++++++++++++                                     | 26% ~03s          
   |++++++++++++++                                    | 27% ~03s          
   |++++++++++++++                                    | 28% ~03s          
   |+++++++++++++++                                   | 29% ~03s          
   |++++++++++++++++                                  | 30% ~03s          
   |++++++++++++++++                                  | 31% ~03s          
   |+++++++++++++++++                                 | 32% ~03s          
   |+++++++++++++++++                                 | 33% ~03s          
   |++++++++++++++++++                                | 34% ~03s          
   |++++++++++++++++++                                | 35% ~03s          
   |+++++++++++++++++++                               | 37% ~03s          
   |+++++++++++++++++++                               | 38% ~03s          
   |++++++++++++++++++++                              | 39% ~03s          
   |++++++++++++++++++++                              | 40% ~03s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |+++++++++++++++++++++                             | 42% ~02s          
   |++++++++++++++++++++++                            | 43% ~02s          
   |+++++++++++++++++++++++                           | 44% ~02s          
   |+++++++++++++++++++++++                           | 45% ~02s          
   |++++++++++++++++++++++++                          | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~02s          
   |+++++++++++++++++++++++++                         | 48% ~02s          
   |+++++++++++++++++++++++++                         | 49% ~02s          
   |++++++++++++++++++++++++++                        | 51% ~02s          
   |++++++++++++++++++++++++++                        | 52% ~02s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |+++++++++++++++++++++++++++                       | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 55% ~02s          
   |++++++++++++++++++++++++++++                      | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~02s          
   |++++++++++++++++++++++++++++++                    | 58% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |+++++++++++++++++++++++++++++++                   | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~02s          
   |++++++++++++++++++++++++++++++++                  | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |++++++++++++++++++++++++++++++++++                | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 04s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~08s          
   |++                                                | 2 % ~07s          
   |++                                                | 3 % ~07s          
   |+++                                               | 4 % ~07s          
   |+++                                               | 5 % ~07s          
   |++++                                              | 6 % ~07s          
   |++++                                              | 7 % ~07s          
   |+++++                                             | 8 % ~07s          
   |+++++                                             | 9 % ~06s          
   |++++++                                            | 10% ~06s          
   |++++++                                            | 11% ~06s          
   |+++++++                                           | 12% ~06s          
   |+++++++                                           | 13% ~06s          
   |++++++++                                          | 14% ~06s          
   |++++++++                                          | 15% ~06s          
   |+++++++++                                         | 16% ~06s          
   |+++++++++                                         | 17% ~06s          
   |++++++++++                                        | 18% ~06s          
   |++++++++++                                        | 19% ~06s          
   |+++++++++++                                       | 20% ~05s          
   |+++++++++++                                       | 21% ~05s          
   |++++++++++++                                      | 22% ~05s          
   |++++++++++++                                      | 23% ~05s          
   |+++++++++++++                                     | 24% ~05s          
   |+++++++++++++                                     | 26% ~05s          
   |++++++++++++++                                    | 27% ~05s          
   |++++++++++++++                                    | 28% ~05s          
   |+++++++++++++++                                   | 29% ~05s          
   |+++++++++++++++                                   | 30% ~05s          
   |++++++++++++++++                                  | 31% ~05s          
   |++++++++++++++++                                  | 32% ~05s          
   |+++++++++++++++++                                 | 33% ~04s          
   |+++++++++++++++++                                 | 34% ~04s          
   |++++++++++++++++++                                | 35% ~04s          
   |++++++++++++++++++                                | 36% ~04s          
   |+++++++++++++++++++                               | 37% ~04s          
   |+++++++++++++++++++                               | 38% ~04s          
   |++++++++++++++++++++                              | 39% ~04s          
   |++++++++++++++++++++                              | 40% ~04s          
   |+++++++++++++++++++++                             | 41% ~04s          
   |+++++++++++++++++++++                             | 42% ~04s          
   |++++++++++++++++++++++                            | 43% ~04s          
   |++++++++++++++++++++++                            | 44% ~04s          
   |+++++++++++++++++++++++                           | 45% ~04s          
   |+++++++++++++++++++++++                           | 46% ~04s          
   |++++++++++++++++++++++++                          | 47% ~03s          
   |++++++++++++++++++++++++                          | 48% ~03s          
   |+++++++++++++++++++++++++                         | 49% ~03s          
   |+++++++++++++++++++++++++                         | 50% ~03s          
   |++++++++++++++++++++++++++                        | 51% ~03s          
   |+++++++++++++++++++++++++++                       | 52% ~03s          
   |+++++++++++++++++++++++++++                       | 53% ~03s          
   |++++++++++++++++++++++++++++                      | 54% ~03s          
   |++++++++++++++++++++++++++++                      | 55% ~03s          
   |+++++++++++++++++++++++++++++                     | 56% ~03s          
   |+++++++++++++++++++++++++++++                     | 57% ~03s          
   |++++++++++++++++++++++++++++++                    | 58% ~03s          
   |++++++++++++++++++++++++++++++                    | 59% ~03s          
   |+++++++++++++++++++++++++++++++                   | 60% ~03s          
   |+++++++++++++++++++++++++++++++                   | 61% ~03s          
   |++++++++++++++++++++++++++++++++                  | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
   |++++++++++++++++++++++++++++++++++                | 66% ~02s          
   |++++++++++++++++++++++++++++++++++                | 67% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 07s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~09s          
   |++                                                | 2 % ~09s          
   |++                                                | 3 % ~08s          
   |+++                                               | 4 % ~08s          
   |+++                                               | 5 % ~08s          
   |++++                                              | 6 % ~08s          
   |++++                                              | 7 % ~08s          
   |+++++                                             | 9 % ~07s          
   |+++++                                             | 10% ~07s          
   |++++++                                            | 11% ~07s          
   |++++++                                            | 12% ~07s          
   |+++++++                                           | 13% ~07s          
   |+++++++                                           | 14% ~07s          
   |++++++++                                          | 15% ~07s          
   |++++++++                                          | 16% ~07s          
   |+++++++++                                         | 17% ~07s          
   |++++++++++                                        | 18% ~07s          
   |++++++++++                                        | 19% ~07s          
   |+++++++++++                                       | 20% ~07s          
   |+++++++++++                                       | 21% ~07s          
   |++++++++++++                                      | 22% ~06s          
   |++++++++++++                                      | 23% ~06s          
   |+++++++++++++                                     | 24% ~06s          
   |+++++++++++++                                     | 26% ~06s          
   |++++++++++++++                                    | 27% ~06s          
   |++++++++++++++                                    | 28% ~06s          
   |+++++++++++++++                                   | 29% ~06s          
   |+++++++++++++++                                   | 30% ~06s          
   |++++++++++++++++                                  | 31% ~06s          
   |++++++++++++++++                                  | 32% ~06s          
   |+++++++++++++++++                                 | 33% ~05s          
   |++++++++++++++++++                                | 34% ~05s          
   |++++++++++++++++++                                | 35% ~05s          
   |+++++++++++++++++++                               | 36% ~05s          
   |+++++++++++++++++++                               | 37% ~05s          
   |++++++++++++++++++++                              | 38% ~05s          
   |++++++++++++++++++++                              | 39% ~05s          
   |+++++++++++++++++++++                             | 40% ~05s          
   |+++++++++++++++++++++                             | 41% ~05s          
   |++++++++++++++++++++++                            | 43% ~05s          
   |++++++++++++++++++++++                            | 44% ~05s          
   |+++++++++++++++++++++++                           | 45% ~04s          
   |+++++++++++++++++++++++                           | 46% ~04s          
   |++++++++++++++++++++++++                          | 47% ~04s          
   |++++++++++++++++++++++++                          | 48% ~04s          
   |+++++++++++++++++++++++++                         | 49% ~04s          
   |+++++++++++++++++++++++++                         | 50% ~04s          
   |++++++++++++++++++++++++++                        | 51% ~04s          
   |+++++++++++++++++++++++++++                       | 52% ~04s          
   |+++++++++++++++++++++++++++                       | 53% ~04s          
   |++++++++++++++++++++++++++++                      | 54% ~04s          
   |++++++++++++++++++++++++++++                      | 55% ~04s          
   |+++++++++++++++++++++++++++++                     | 56% ~04s          
   |+++++++++++++++++++++++++++++                     | 57% ~03s          
   |++++++++++++++++++++++++++++++                    | 59% ~03s          
   |++++++++++++++++++++++++++++++                    | 60% ~03s          
   |+++++++++++++++++++++++++++++++                   | 61% ~03s          
   |+++++++++++++++++++++++++++++++                   | 62% ~03s          
   |++++++++++++++++++++++++++++++++                  | 63% ~03s          
   |++++++++++++++++++++++++++++++++                  | 64% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
   |++++++++++++++++++++++++++++++++++                | 67% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 08s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~06s          
   |+                                                 | 2 % ~06s          
   |++                                                | 3 % ~06s          
   |++                                                | 4 % ~06s          
   |+++                                               | 5 % ~06s          
   |+++                                               | 6 % ~06s          
   |++++                                              | 7 % ~06s          
   |++++                                              | 8 % ~05s          
   |+++++                                             | 9 % ~05s          
   |+++++                                             | 10% ~05s          
   |++++++                                            | 11% ~05s          
   |++++++                                            | 12% ~05s          
   |+++++++                                           | 13% ~05s          
   |+++++++                                           | 14% ~05s          
   |++++++++                                          | 15% ~05s          
   |++++++++                                          | 16% ~05s          
   |+++++++++                                         | 17% ~05s          
   |+++++++++                                         | 18% ~05s          
   |++++++++++                                        | 19% ~05s          
   |++++++++++                                        | 20% ~05s          
   |+++++++++++                                       | 21% ~05s          
   |+++++++++++                                       | 22% ~05s          
   |++++++++++++                                      | 23% ~05s          
   |++++++++++++                                      | 24% ~04s          
   |+++++++++++++                                     | 25% ~04s          
   |+++++++++++++                                     | 26% ~04s          
   |++++++++++++++                                    | 27% ~04s          
   |++++++++++++++                                    | 28% ~04s          
   |+++++++++++++++                                   | 29% ~04s          
   |+++++++++++++++                                   | 30% ~04s          
   |++++++++++++++++                                  | 31% ~04s          
   |++++++++++++++++                                  | 32% ~04s          
   |+++++++++++++++++                                 | 33% ~04s          
   |+++++++++++++++++                                | 34% ~04s          
   |++++++++++++++++++                                | 35% ~04s          
   |++++++++++++++++++                                | 36% ~04s          
   |+++++++++++++++++++                               | 37% ~04s          
   |+++++++++++++++++++                               | 38% ~04s          
   |++++++++++++++++++++                              | 39% ~04s          
   |++++++++++++++++++++                              | 40% ~04s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |+++++++++++++++++++++                             | 42% ~03s          
   |++++++++++++++++++++++                            | 43% ~03s          
   |++++++++++++++++++++++                            | 44% ~03s          
   |+++++++++++++++++++++++                           | 45% ~03s          
   |+++++++++++++++++++++++                           | 46% ~03s          
   |++++++++++++++++++++++++                          | 47% ~03s          
   |++++++++++++++++++++++++                          | 48% ~03s          
   |+++++++++++++++++++++++++                         | 49% ~03s          
   |+++++++++++++++++++++++++                         | 50% ~03s          
   |++++++++++++++++++++++++++                        | 51% ~03s          
   |++++++++++++++++++++++++++                        | 52% ~03s          
   |+++++++++++++++++++++++++++                       | 53% ~03s          
   |+++++++++++++++++++++++++++                       | 54% ~03s          
   |++++++++++++++++++++++++++++                      | 55% ~03s          
   |++++++++++++++++++++++++++++                     | 56% ~03s          
   |+++++++++++++++++++++++++++++                     | 57% ~03s          
   |+++++++++++++++++++++++++++++                     | 58% ~03s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |++++++++++++++++++++++++++++++                    | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~02s          
   |+++++++++++++++++++++++++++++++                   | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |++++++++++++++++++++++++++++++++                  | 64% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
   |++++++++++++++++++++++++++++++++++                | 67% ~02s          
   |++++++++++++++++++++++++++++++++++               | 68% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 06s
subtiss.markers %>% group_by(cluster) %>% top_n(3)
Selecting by gene

Check expression of genes of interset.

genes_to_check = c('Lgr5','Fabp5','Marcks','Zfp830','Slc6a8')
FeaturePlot(subtiss, genes_to_check, pt.size = 1)

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

# To change the y-axis to show raw counts, add use.raw = T.
DotPlot(subtiss, genes_to_check, plot.legend = T)

How big are the clusters?

table(subtiss@ident)

 0  1  2  3 
62 47 39 36 

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = subtiss, do.return = TRUE, group.by = "plate.barcode")

Print a table showing the count of cells in each identity category from each plate.

table(as.character(subtiss@ident), as.character(subtiss@meta.data$plate.barcode))
   
    B001717 B002775 MAA000545 MAA000752 MAA000801 MAA000922
  0       8      11         7        12        19         5
  1       1       1        16         8        16         5
  2       6       2         5         4        21         1
  3      27       4         0         1         3         1

Save the Robject for later

When you save the annotated tissue, please give it a name.

filename = here('00_data_ingest', '04_tissue_robj_generated', 
                     paste0("facs", tissue_of_interest, "_seurat_tiss.Robj"))
print(filename)
[1] "/Users/olgabot/code/tabula-muris/00_data_ingest/04_tissue_robj_generated/facsKidney_seurat_tiss.Robj"
save(tiss, file=filename)
# To reload a saved object
# filename = here('00_data_ingest', '04_tissue_robj_generated', 
#                      paste0("facs", tissue_of_interest, "_seurat_tiss.Robj"))
# load(file=filename)

Export the final metadata

So that Biohub can easily combine all your cell_ontology_classs, please export them as a simple csv.

head(tiss@meta.data)
filename = here('00_data_ingest', '03_tissue_annotation_csv', 
                     paste0(tissue_of_interest, "_facs_annotation.csv"))
write.csv(FetchData(tiss, c('plate.barcode','cell_ontology_class','cell_ontology_id', 'free_annotation', 'tSNE_1', 'tSNE_2')), file=filename)
LS0tCnRpdGxlOiAiS2lkbmV5IEZBQ1MgTm90ZWJvb2siCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCkVudGVyIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIG1hY2EgZm9sZGVyIG9uIHlvdXIgZHJpdmUgYW5kIHRoZSBuYW1lIG9mIHRoZSB0aXNzdWUgeW91IHdhbnQgdG8gYW5hbHl6ZS4KCmBgYHtyfQp0aXNzdWVfb2ZfaW50ZXJlc3QgPSAiS2lkbmV5IgpsaWJyYXJ5KGhlcmUpCnNvdXJjZShoZXJlKCIwMF9kYXRhX2luZ2VzdCIsICIwMl90aXNzdWVfYW5hbHlzaXNfcm1kIiwgImJvaWxlcnBsYXRlLlIiKSkKdGlzcyA9IGxvYWRfdGlzc3VlX2ZhY3ModGlzc3VlX29mX2ludGVyZXN0KQpgYGAKClZpc3VhbGl6ZSB0b3AgZ2VuZXMgaW4gcHJpbmNpcGFsIGNvbXBvbmVudHMKCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQpQQ0hlYXRtYXAob2JqZWN0ID0gdGlzcywgcGMudXNlID0gMTo4LCBjZWxscy51c2UgPSA1MDAsIGRvLmJhbGFuY2VkID0gVFJVRSwgbGFiZWwuY29sdW1ucyA9IEZBTFNFLCBudW0uZ2VuZXMgPSA4KQpgYGAKCkxhdGVyIG9uIChpbiBGaW5kQ2x1c3RlcnMgYW5kIFRTTkUpIHlvdSB3aWxsIHBpY2sgYSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGtlZXBpbmcgdGhlIG1ham9yIGRpcmVjdGlvbnMgb2YgdmFyaWF0aW9uIGluIHRoZSBkYXRhIGFuZCwgaWRlYWxseSwgc3VwcmVzc2luZyBub2lzZS4gVGhlcmUgaXMgbm8gY29ycmVjdCBhbnN3ZXIgdG8gdGhlIG51bWJlciB0byB1c2UsIGJ1dCBhIGRlY2VudCBydWxlIG9mIHRodW1iIGlzIHRvIGdvIHVudGlsIHRoZSBwbG90IHBsYXRlYXVzLgoKYGBge3J9ClBDRWxib3dQbG90KG9iamVjdCA9IHRpc3MpCmBgYAoKQ2hvb3NlIHRoZSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLgpgYGB7cn0KIyBTZXQgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzLiAKbi5wY3MgPSA3CmBgYAoKClRoZSBjbHVzdGVyaW5nIGlzIHBlcmZvcm1lZCBiYXNlZCBvbiBhIG5lYXJlc3QgbmVpZ2hib3JzIGdyYXBoLiBDZWxscyB0aGF0IGhhdmUgc2ltaWxhciBleHByZXNzaW9uIHdpbGwgYmUgam9pbmVkIHRvZ2V0aGVyLiBUaGUgTG91dmFpbiBhbGdvcml0aG0gbG9va3MgZm9yIGdyb3VwcyBvZiBjZWxscyB3aXRoIGhpZ2ggbW9kdWxhcml0eS0tbW9yZSBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGdyb3VwIHRoYW4gYmV0d2VlbiBncm91cHMuIFRoZSByZXNvbHV0aW9uIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBzY2FsZS4uLmhpZ2hlciByZXNvbHV0aW9uIHdpbGwgZ2l2ZSBtb3JlIGNsdXN0ZXJzLCBsb3dlciByZXNvbHV0aW9uIHdpbGwgZ2l2ZSBmZXdlci4KCkZvciB0aGUgdG9wLWxldmVsIGNsdXN0ZXJpbmcsIGFpbSB0byB1bmRlci1jbHVzdGVyIGluc3RlYWQgb2Ygb3Zlci1jbHVzdGVyLiBJdCB3aWxsIGJlIGVhc3kgdG8gc3Vic2V0IGdyb3VwcyBhbmQgZnVydGhlciBhbmFseXplIHRoZW0gYmVsb3cuCgpgYGB7cn0KIyBTZXQgcmVzb2x1dGlvbiAKcmVzLnVzZWQgPC0gMi41Cgp0aXNzIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSB0aXNzLCByZWR1Y3Rpb24udHlwZSA9ICJwY2EiLCBkaW1zLnVzZSA9IDE6bi5wY3MsIAogICAgcmVzb2x1dGlvbiA9IHJlcy51c2VkLCBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYAoKVG8gdmlzdWFsaXplIApgYGB7cn0KIyBJZiBjZWxscyBhcmUgdG9vIHNwcmVhZCBvdXQsIHlvdSBjYW4gcmFpc2UgdGhlIHBlcnBsZXhpdHkuIElmIHlvdSBoYXZlIGZldyBjZWxscywgdHJ5IGEgbG93ZXIgcGVycGxleGl0eSAoYnV0IG5ldmVyIGxlc3MgdGhhbiAxMCkuCnRpc3MgPC0gUnVuVFNORShvYmplY3QgPSB0aXNzLCBkaW1zLnVzZSA9IDE6bi5wY3MsIHNlZWQudXNlID0gMTAsIHBlcnBsZXhpdHk9MzApCmBgYAoKYGBge3J9CiMgbm90ZSB0aGF0IHlvdSBjYW4gc2V0IGRvLmxhYmVsPVQgdG8gaGVscCBsYWJlbCBpbmRpdmlkdWFsIGNsdXN0ZXJzClRTTkVQbG90KG9iamVjdCA9IHRpc3MsIGRvLmxhYmVsID0gVCkKYGBgCgpDb21wYXJlIHRvIHByZXZpb3VzIGFubm90YXRpb25zCmBgYHtyfQpmaWxlbmFtZSA9IGhlcmUoJzAwX2RhdGFfaW5nZXN0JywgJzAzX3Rpc3N1ZV9hbm5vdGF0aW9uX2NzdicsIAogICAgICAgICAgICAgICAgICAgICBwYXN0ZTAodGlzc3VlX29mX2ludGVyZXN0LCAiX2ZhY3NfYW5ub3RhdGlvbi5jc3YiKSkKcHJldmlvdXNfYW5ub3RhdGlvbiA9IHJlYWRfY3N2KGZpbGVuYW1lKQp0aXNzQG1ldGEuZGF0YVssICJwcmV2aW91c19hbm5vdGF0aW9uIl0gPC0gIk5BIgp0aXNzQG1ldGEuZGF0YVthcy5jaGFyYWN0ZXIocHJldmlvdXNfYW5ub3RhdGlvbiRYMSksICdwcmV2aW91c19hbm5vdGF0aW9uJ10gPC0gYXMuY2hhcmFjdGVyKHByZXZpb3VzX2Fubm90YXRpb24kY2VsbF9vbnRvbG9neV9jbGFzcykKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAicHJldmlvdXNfYW5ub3RhdGlvbiIpCmBgYAoKCmBgYHtyfQp0YWJsZSh0aXNzQG1ldGEuZGF0YVssICJwcmV2aW91c19hbm5vdGF0aW9uIl0pCmBgYAoKCmBgYHtyfQp0YWJsZSh0aXNzQG1ldGEuZGF0YVssICJwcmV2aW91c19hbm5vdGF0aW9uIl0sIHRpc3NAaWRlbnQpCmBgYAoKCkNoZWNrIGV4cHJlc3Npb24gb2YgZ2VuZXMgb2YgaW50ZXJzZXQuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTh9CmdlbmVzX3RvX2NoZWNrID0gYygnUHRwcmMnLCdVbW9kJywnUGVjYW0xJywnRXBjYW0nLCdQdmFsYicsJ1NsYzEyYTMnLCdTbGMzNGExJywnU2xjMjJhMTInLCdFbXIxJywnTHl6MicsJ0l0Z2FtJykKI2dlbmVzX3RvX2NoZWNrID0gYygnQWxiJywgJ0N5cDJmMicsICdDeXAyZTEnLCAnVmVnZicpCgpGZWF0dXJlUGxvdCh0aXNzLCBnZW5lc190b19jaGVjaywgcHQuc2l6ZSA9IDEsIG5Db2wgPSAzKQpgYGAKCkRvdHBsb3RzIGxldCB5b3Ugc2VlIHRoZSBpbnRlbnNpdHkgb2YgZXhwcHJlc3Npb24gYW5kIHRoZSBmcmFjdGlvbiBvZiBjZWxscyBleHByZXNzaW5nIGZvciBlYWNoIG9mIHlvdXIgZ2VuZXMgb2YgaW50ZXJlc3QuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KIyBUbyBjaGFuZ2UgdGhlIHktYXhpcyB0byBzaG93IHJhdyBjb3VudHMsIGFkZCB1c2UucmF3ID0gVC4KRG90UGxvdCh0aXNzLCBnZW5lc190b19jaGVjaywgcGxvdC5sZWdlbmQgPSBUKQpgYGAKCkhvdyBiaWcgYXJlIHRoZSBjbHVzdGVycz8KYGBge3J9CnRhYmxlKHRpc3NAaWRlbnQpCmBgYAoKPCEtLSBXaGljaCBtYXJrZXJzIGlkZW50aWZ5IGEgc3BlY2lmaWMgY2x1c3Rlcj8gLS0+Cgo8IS0tIGBgYHtyfSAtLT4KPCEtLSBjbHVzdC5tYXJrZXJzIDwtIEZpbmRNYXJrZXJzKG9iamVjdCA9IHRpc3MsIGlkZW50LjEgPSA3LCBpZGVudC4yID0gYygyLDMsNCw2KSwgb25seS5wb3MgPSBUUlVFLCBtaW4ucGN0ID0gMC4yNSwgdGhyZXNoLnVzZSA9IDAuMjUpIC0tPgo8IS0tIGBgYCAtLT4KCjwhLS0gYGBge3J9IC0tPgo8IS0tIHByaW50KHggPSBoZWFkKHg9IGNsdXN0Lm1hcmtlcnMsIG4gPSAyMCwgYXZnX2xvZ0ZDKSkgLS0+CjwhLS0gYGBgIC0tPgoKPCEtLSBZb3UgY2FuIGFsc28gY29tcHV0ZSBhbGwgbWFya2VycyBmb3IgYWxsIGNsdXN0ZXJzIGF0IG9uY2UuIFRoaXMgbWF5IHRha2Ugc29tZSB0aW1lLiAtLT4KPCEtLSBgYGB7cn0gLS0+CjwhLS0gdGlzcy5tYXJrZXJzIDwtIEZpbmRBbGxNYXJrZXJzKG9iamVjdCA9IHRpc3MsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KSAtLT4KPCEtLSBgYGAgLS0+Cgo8IS0tIERpc3BsYXkgdGhlIHRvcCBtYXJrZXJzIHlvdSBjb21wdXRlZCBhYm92ZS4gLS0+CjwhLS0gYGBge3J9IC0tPgo8IS0tIHRpc3MubWFya2VycyAlPiUgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIHRvcF9uKDEwLCBhdmdfbG9nRkMpIC0tPgo8IS0tIGBgYCAtLT4KCiMjIEFzc2lnbmluZyBjZWxsIHR5cGUgaWRlbnRpdHkgdG8gY2x1c3RlcnMKCkF0IGEgY29hcnNlIGxldmVsLCB3ZSBjYW4gdXNlIGNhbm9uaWNhbCBtYXJrZXJzIHRvIG1hdGNoIHRoZSB1bmJpYXNlZCBjbHVzdGVyaW5nIHRvIGtub3duIGNlbGwgdHlwZXM6CgpgYGB7cn0KdGlzcyA8LSBTdGFzaElkZW50KG9iamVjdCA9IHRpc3MsIHNhdmUubmFtZSA9ICJjbHVzdGVyLmlkcyIpCgpjbHVzdGVyLmlkcyA8LSBjKDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkpCgpjZWxsX29udG9sb2d5X2NsYXNzIDwtIGMoCiAgImVuZG90aGVsaWFsIGNlbGwiLCAKICAgJ2tpZG5leSBjb2xsZWN0aW5nIGR1Y3QgaW50ZXJjYWxhdGVkIGNlbGwnLCAKICAgJ2VwaXRoZWxpYWwgY2VsbCBvZiBwcm94aW1hbCB0dWJ1bGUnLCAKICAgImtpZG5leSBjb2xsZWN0aW5nIGR1Y3QgcHJpbmNpcGFsIGNlbGwiLCAKICAgImVwaXRoZWxpYWwgY2VsbCBvZiBwcm94aW1hbCB0dWJ1bGUiLCAKICAgJ2VuZG90aGVsaWFsIGNlbGwnLAogICAia2lkbmV5IHByb3hpbWFsIHN0cmFpZ2h0IHR1YnVsZSBlcGl0aGVsaWFsIGNlbGwiLCAKICAgImtpZG5leSBwcm94aW1hbCBzdHJhaWdodCB0dWJ1bGUgZXBpdGhlbGlhbCBjZWxsIiwgCiAgICJtYWNyb3BoYWdlIiwgCiAgICJuYXR1cmFsIGtpbGxlciBjZWxsIikKCmZyZWVfYW5ub3RhdGlvbiA8LSBjKE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKQoKdGlzcyA9IHN0YXNoX2Fubm90YXRpb25zKHRpc3MsIGNsdXN0ZXIuaWRzLCBmcmVlX2Fubm90YXRpb24sIGNlbGxfb250b2xvZ3lfY2xhc3MpCgpUU05FUGxvdCh0aXNzLCBncm91cC5ieT0nY2VsbF9vbnRvbG9neV9jbGFzcycsIGRvLnJldHVybj1UUlVFKQpgYGAKCgojIyBDaGVja2luZyBmb3IgYmF0Y2ggZWZmZWN0cwoKCkNvbG9yIGJ5IG1ldGFkYXRhLCBsaWtlIHBsYXRlIGJhcmNvZGUsIHRvIGNoZWNrIGZvciBiYXRjaCBlZmZlY3RzLgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAicGxhdGUuYmFyY29kZSIpCmBgYAoKUHJpbnQgYSB0YWJsZSBzaG93aW5nIHRoZSBjb3VudCBvZiBjZWxscyBpbiBlYWNoIGlkZW50aXR5IGNhdGVnb3J5IGZyb20gZWFjaCBwbGF0ZS4KCmBgYHtyfQp0YWJsZShhcy5jaGFyYWN0ZXIodGlzc0BpZGVudCksIGFzLmNoYXJhY3Rlcih0aXNzQG1ldGEuZGF0YSRwbGF0ZS5iYXJjb2RlKSkKYGBgCgoKCgojIFN1YnNldCBhbmQgaXRlcmF0ZQoKV2UgY2FuIHJlcGVhdCB0aGUgYWJvdmUgYW5hbHlzaXMgb24gYSBzdWJzZXQgb2YgY2VsbHMsIGRlZmluZWQgdXNpbmcgY2x1c3RlciBJRHMgb3Igc29tZSBvdGhlciBtZXRhZGF0YS4gVGhpcyBpcyBhIGdvb2Qgd2F5IHRvIGRyaWxsIGRvd24gYW5kIGZpbmQgc3Vic3RydWN0dXJlLgoKIyMgRmlyc3Qgc3Vic2V0CgpgYGB7cn0KIyBTdWJzZXQgZGF0YSBiYXNlZCBvbiBjbHVzdGVyIGlkCnN1YnRpc3MgPC0gU3Vic2V0RGF0YShvYmplY3QgPSB0aXNzLCBpZGVudC51c2UgPSBjKDYsNCw5LDIpLCBkby5jZW50ZXIgPSBGLCBkby5zY2FsZSA9IEYsIGNlbGxzLnVzZSA9ICkKCiMgVG8gc3Vic2V0IGRhdGEgYmFzZWQgb24gY2VsbF9vbnRvbG9neV9jbGFzcyBvciBvdGhlciBtZXRhZGF0YSwgeW91IGNhbiBleHBsaWNpdGx5IHBhc3MgY2VsbCBuYW1lcwoKIyBhbm5vID0gJ2V4b2NyaW5lIGNlbGxzJwojIGNlbGxzLnRvLnVzZSA9IHRpc3NAY2VsbC5uYW1lc1t3aGljaCh0aXNzQG1ldGEuZGF0YSRjZWxsX29udG9sb2d5X2NsYXNzID09IGFubm8pXQojIHN1YnRpc3MgPC0gU3Vic2V0RGF0YShvYmplY3QgPSB0aXNzLCBjZWxscy51c2UgPSBjZWxscy50by51c2UsIGRvLmNlbnRlciA9IEYsIGRvLnNjYWxlID0gRikKCmBgYAoKYGBge3J9CnN1YnRpc3MgPC0gTm9ybWFsaXplRGF0YShvYmplY3QgPSBzdWJ0aXNzKQpzdWJ0aXNzIDwtIFNjYWxlRGF0YShvYmplY3QgPSBzdWJ0aXNzLCB2YXJzLnRvLnJlZ3Jlc3MgPSBjKCJuUmVhZHMiLCAicGVyY2VudC5yaWJvIiwiUm40NXMiKSkKYGBgCgpgYGB7cn0Kc3VidGlzcyA8LSBGaW5kVmFyaWFibGVHZW5lcyhvYmplY3QgPSBzdWJ0aXNzLCBkby5wbG90ID0gVFJVRSwgeC5oaWdoLmN1dG9mZiA9IEluZiwgeS5jdXRvZmYgPSAwLjgpCnN1YnRpc3MgPC0gUnVuUENBKG9iamVjdCA9IHN1YnRpc3MsIHBjcy5jb21wdXRlID0gMjApCnN1YnRpc3MgPC0gUHJvamVjdFBDQShvYmplY3QgPSBzdWJ0aXNzLCBkby5wcmludCA9IEZBTFNFKQpgYGAKCgpSdW4gUHJpbmNpcGFsIENvbXBvbmVudCBBbmFseXNpcy4KYGBge3J9CnN1YnRpc3MgPC0gUnVuUENBKG9iamVjdCA9IHN1YnRpc3MsIGRvLnByaW50ID0gRkFMU0UpCnN1YnRpc3MgPC0gUHJvamVjdFBDQShvYmplY3QgPSBzdWJ0aXNzLCBkby5wcmludCA9IEZBTFNFKQpgYGAKCmBgYHtyfQojIElmIHRoaXMgZmFpbHMgZm9yIHlvdXIgc3Vic2V0LCBpdCBtYXkgYmUgdGhhdCBjZWxscy51c2UgaXMgbW9yZSBjZWxscyB0aGFuIHlvdSBoYXZlIGxlZnQhIFRyeSByZWR1Y2luZyBpdC4KUENIZWF0bWFwKG9iamVjdCA9IHN1YnRpc3MsIHBjLnVzZSA9IDE6MywgY2VsbHMudXNlID0gMjkwLCBkby5iYWxhbmNlZCA9IFRSVUUsIGxhYmVsLmNvbHVtbnMgPSBGQUxTRSwgbnVtLmdlbmVzID0gMykKYGBgCgpMYXRlciBvbiAoaW4gRmluZENsdXN0ZXJzIGFuZCBUU05FKSB5b3Ugd2lsbCBwaWNrIGEgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBrZWVwaW5nIHRoZSBtYWpvciBkaXJlY3Rpb25zIG9mIHZhcmlhdGlvbiBpbiB0aGUgZGF0YSBhbmQsIGlkZWFsbHksIHN1cHJlc3Npbmcgbm9pc2UuIFRoZXJlIGlzIG5vIGNvcnJlY3QgYW5zd2VyIHRvIHRoZSBudW1iZXIgdG8gdXNlLCBidXQgYSBkZWNlbnQgcnVsZSBvZiB0aHVtYiBpcyB0byBnbyB1bnRpbCB0aGUgcGxvdCBwbGF0ZWF1cy4KCmBgYHtyfQpQQ0VsYm93UGxvdChvYmplY3QgPSBzdWJ0aXNzKQpgYGAKCkNob29zZSB0aGUgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4KYGBge3J9CiMgU2V0IG51bWJlciBvZiBwcmluY2lwYWwgY29tcG9uZW50cy4gCnN1Yi5uLnBjcyA9IDEwCmBgYAoKClRoZSBjbHVzdGVyaW5nIGlzIHBlcmZvcm1lZCBiYXNlZCBvbiBhIG5lYXJlc3QgbmVpZ2hib3JzIGdyYXBoLiBDZWxscyB0aGF0IGhhdmUgc2ltaWxhciBleHByZXNzaW9uIHdpbGwgYmUgam9pbmVkIHRvZ2V0aGVyLiBUaGUgTG91dmFpbiBhbGdvcml0aG0gbG9va3MgZm9yIGdyb3VwcyBvZiBjZWxscyB3aXRoIGhpZ2ggbW9kdWxhcml0eS0tbW9yZSBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGdyb3VwIHRoYW4gYmV0d2VlbiBncm91cHMuIFRoZSByZXNvbHV0aW9uIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBzY2FsZS4uLmhpZ2hlciByZXNvbHV0aW9uIHdpbGwgZ2l2ZSBtb3JlIGNsdXN0ZXJzLCBsb3dlciByZXNvbHV0aW9uIHdpbGwgZ2l2ZSBmZXdlci4KCmBgYHtyfQojIFNldCByZXNvbHV0aW9uIApzdWIucmVzLnVzZWQgPC0gMQoKc3VidGlzcyA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0ID0gc3VidGlzcywgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOnN1Yi5uLnBjcywgCiAgICByZXNvbHV0aW9uID0gc3ViLnJlcy51c2VkLCBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYAoKVG8gdmlzdWFsaXplIApgYGB7cn0KIyBJZiBjZWxscyBhcmUgdG9vIHNwcmVhZCBvdXQsIHlvdSBjYW4gcmFpc2UgdGhlIHBlcnBsZXhpdHkuIElmIHlvdSBoYXZlIGZldyBjZWxscywgdHJ5IGEgbG93ZXIgcGVycGxleGl0eSAoYnV0IG5ldmVyIGxlc3MgdGhhbiAxMCkuCnN1YnRpc3MgPC0gUnVuVFNORShvYmplY3QgPSBzdWJ0aXNzLCBkaW1zLnVzZSA9IDE6c3ViLm4ucGNzLCBzZWVkLnVzZSA9IDEwLCBwZXJwbGV4aXR5PTEwKQpgYGAKCmBgYHtyfQojIG5vdGUgdGhhdCB5b3UgY2FuIHNldCBkby5sYWJlbD1UIHRvIGhlbHAgbGFiZWwgaW5kaXZpZHVhbCBjbHVzdGVycwpUU05FUGxvdChvYmplY3QgPSBzdWJ0aXNzLCBkby5sYWJlbCA9IFQpCmBgYAoKYGBge3J9CnN1YnRpc3MubWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhvYmplY3QgPSBzdWJ0aXNzLCBvbmx5LnBvcyA9IFRSVUUsIG1pbi5wY3QgPSAwLjI1LCB0aHJlc2gudXNlID0gMC4yNSkKYGBgCgpgYGB7cn0Kc3VidGlzcy5tYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24oMykKYGBgCgpDaGVjayBleHByZXNzaW9uIG9mIGdlbmVzIG9mIGludGVyc2V0LgpgYGB7cn0KZ2VuZXNfdG9fY2hlY2sgPSBjKCdMZ3I1JywnRmFicDUnLCdNYXJja3MnLCdaZnA4MzAnLCdTbGM2YTgnKQoKRmVhdHVyZVBsb3Qoc3VidGlzcywgZ2VuZXNfdG9fY2hlY2ssIHB0LnNpemUgPSAxKQpgYGAKCkRvdHBsb3RzIGxldCB5b3Ugc2VlIHRoZSBpbnRlbnNpdHkgb2YgZXhwcHJlc3Npb24gYW5kIHRoZSBmcmFjdGlvbiBvZiBjZWxscyBleHByZXNzaW5nIGZvciBlYWNoIG9mIHlvdXIgZ2VuZXMgb2YgaW50ZXJlc3QuCgpgYGB7cn0KIyBUbyBjaGFuZ2UgdGhlIHktYXhpcyB0byBzaG93IHJhdyBjb3VudHMsIGFkZCB1c2UucmF3ID0gVC4KRG90UGxvdChzdWJ0aXNzLCBnZW5lc190b19jaGVjaywgcGxvdC5sZWdlbmQgPSBUKQpgYGAKCkhvdyBiaWcgYXJlIHRoZSBjbHVzdGVycz8KYGBge3J9CnRhYmxlKHN1YnRpc3NAaWRlbnQpCmBgYAoKIyMgQ2hlY2tpbmcgZm9yIGJhdGNoIGVmZmVjdHMKCkNvbG9yIGJ5IG1ldGFkYXRhLCBsaWtlIHBsYXRlIGJhcmNvZGUsIHRvIGNoZWNrIGZvciBiYXRjaCBlZmZlY3RzLgpgYGB7cn0KVFNORVBsb3Qob2JqZWN0ID0gc3VidGlzcywgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAicGxhdGUuYmFyY29kZSIpCmBgYAoKUHJpbnQgYSB0YWJsZSBzaG93aW5nIHRoZSBjb3VudCBvZiBjZWxscyBpbiBlYWNoIGlkZW50aXR5IGNhdGVnb3J5IGZyb20gZWFjaCBwbGF0ZS4KCmBgYHtyfQp0YWJsZShhcy5jaGFyYWN0ZXIoc3VidGlzc0BpZGVudCksIGFzLmNoYXJhY3RlcihzdWJ0aXNzQG1ldGEuZGF0YSRwbGF0ZS5iYXJjb2RlKSkKYGBgCgoKCgojIFNhdmUgdGhlIFJvYmplY3QgZm9yIGxhdGVyCldoZW4geW91IHNhdmUgdGhlIGFubm90YXRlZCB0aXNzdWUsIHBsZWFzZSBnaXZlIGl0IGEgbmFtZS4KCmBgYHtyfQpmaWxlbmFtZSA9IGhlcmUoJzAwX2RhdGFfaW5nZXN0JywgJzA0X3Rpc3N1ZV9yb2JqX2dlbmVyYXRlZCcsIAogICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoImZhY3MiLCB0aXNzdWVfb2ZfaW50ZXJlc3QsICJfc2V1cmF0X3Rpc3MuUm9iaiIpKQpwcmludChmaWxlbmFtZSkKc2F2ZSh0aXNzLCBmaWxlPWZpbGVuYW1lKQpgYGAKCmBgYHtyfQojIFRvIHJlbG9hZCBhIHNhdmVkIG9iamVjdAojIGZpbGVuYW1lID0gaGVyZSgnMDBfZGF0YV9pbmdlc3QnLCAnMDRfdGlzc3VlX3JvYmpfZ2VuZXJhdGVkJywgCiMgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKCJmYWNzIiwgdGlzc3VlX29mX2ludGVyZXN0LCAiX3NldXJhdF90aXNzLlJvYmoiKSkKIyBsb2FkKGZpbGU9ZmlsZW5hbWUpCmBgYAoKCgojIEV4cG9ydCB0aGUgZmluYWwgbWV0YWRhdGEKClNvIHRoYXQgQmlvaHViIGNhbiBlYXNpbHkgY29tYmluZSBhbGwgeW91ciBjZWxsX29udG9sb2d5X2NsYXNzcywgcGxlYXNlIGV4cG9ydCB0aGVtIGFzIGEgc2ltcGxlIGNzdi4KCmBgYHtyfQpoZWFkKHRpc3NAbWV0YS5kYXRhKQpgYGAKCgpgYGB7cn0KZmlsZW5hbWUgPSBoZXJlKCcwMF9kYXRhX2luZ2VzdCcsICcwM190aXNzdWVfYW5ub3RhdGlvbl9jc3YnLCAKICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHRpc3N1ZV9vZl9pbnRlcmVzdCwgIl9mYWNzX2Fubm90YXRpb24uY3N2IikpCndyaXRlLmNzdihGZXRjaERhdGEodGlzcywgYygncGxhdGUuYmFyY29kZScsJ2NlbGxfb250b2xvZ3lfY2xhc3MnLCdjZWxsX29udG9sb2d5X2lkJywgJ2ZyZWVfYW5ub3RhdGlvbicsICd0U05FXzEnLCAndFNORV8yJykpLCBmaWxlPWZpbGVuYW1lKQpgYGAKCg==